// 两组整数的并集：去重后按从大到小排序输出
#include <stdio.h>
#include <stdlib.h>

static int cmp_desc(const void *a, const void *b)
{
    int x = *(const int *)a;
    int y = *(const int *)b;
    if (x < y) return 1;   // y 在前（降序）
    if (x > y) return -1;  // x 在前
    return 0;
}

int main(void)
{
    int n1, n2;
    if (scanf("%d", &n1) != 1) return 0;
    int arr[40];
    int total = 0;

    if (n1 < 0 || n1 > 20) return 0;
    for (int i = 0; i < n1; ++i) {
        if (scanf("%d", &arr[total]) != 1) return 0;
        total++;
    }

    if (scanf("%d", &n2) != 1) return 0;
    if (n2 < 0 || n2 > 20) return 0;
    for (int i = 0; i < n2; ++i) {
        if (scanf("%d", &arr[total]) != 1) return 0;
        total++;
    }

    if (total == 0) return 0; // 两组都为空则不输出

    qsort(arr, total, sizeof(int), cmp_desc);

    // 按降序去重输出（只输出第一次出现）
    int last = arr[0];
    printf("%d", last);
    for (int i = 1; i < total; ++i) {
        if (arr[i] != last) {
            printf(" %d", arr[i]);
            last = arr[i];
        }
    }

    return 0;
}